Cmo cargar un codigo bajo?
--------------------------------
por optimux@yahoo.com

Existe una manera de cargar desde un emulador de CPC, desde cinta <TAPE> un programa binario cuya direccin de comienzo est ms baja que la del propio BASIC para luego grabalo en un disco ".DSK" <DISC>. 
Todo ello desde el intrprete BASIC.

Primero se fuerza cargar el programa en cuestion desde cinta a una direccin de comienzo que soporte el BASIC y luego lo grabamos con dicha direccin, pero con su punto de entrada y longitud originales del programa, en el disco.

Primero se apuntas los datos de direccin, longitud, ejecucin y nombre originales del fichero binario, puedes mirar para ello la cabecera AMSDOS del propio fichero de cinta.

|TAPE:MEMORY &2000:LOAD"!PROG",&2000:|DISC:SAVE"!PROG",B,&2000,long,exec

Siendo long y exec los originales de dicho programa. Como veras la direccin de comienzo es falsa, pero el programa que hemos grabado es el que realmente nos interesa.

Luego modificamos la direccin de comienzo en el mismo fichero de disco .DSK con un editor hexadecimal. Los bytes &15 y &16 de la cabecera AMSDOS del propio archivo binario, en el DSK, contienen la direccin de comienzo de carga. Apunta el valor antiguo y sustituyelo por el nuevo, ojo con el formato de numero de 16 bits del Z80.

Luego hay que modificar por el CHECKSUM que estan el los bytes &43 y &44 de la misma cabecera AMSDOS. Se realizar el siguiente clculo:

WORD[&43-44]=WORD[&43-44]-"&20"+"bytes de direccin de comienzo en hexadecimal separados"

-"&20" es el resultado de quitarle al CHECKSUM el "&2000" que inicialmente forzamos para poder grabar el programa; que es "&20" y "&00" o que es lo mismo que restarle solo "&20"

Por ejemplo, si el programa empieza originalmente en &60 (direccin mas baja que el propio BASIC que comienza su primera linea en &170):

WORD[&43-44]=WORD[&43-44]-"&20"+"&60"

Y el CHECKSUM estar correcto y nuestro programa tambien ya en disco.




